/**
 * arguments 是一个对应于传递给函数的参数的 类数组(array-like)对象
 * 数组特性: length, 通过index来取值，但是却没有数组的一些方法比如forEach、map等
 */
function foo(num1, num2) {
  console.log(arguments)
  //将arguments转换成数组
  //方法1
  var newArr1 = Array.prototype.slice.call(arguments)
  console.log(newArr1)
  
  //方法2
  var newArr2 = [].slice.call(arguments)
  console.log(newArr2)
  
  //方法3 ES6新语法
  var newArr3 = Array.from(arguments)
  console.log(newArr3)
  
  //方法4
  var newArr4 = [...arguments]
  console.log(newArr4)
}

//[Arguments] { '0': 1, '1': 2, '2': 3, '3': 4, '4': 5, '5': 6 }
foo(1, 2, 3, 4, 5, 6)

/**
 * 额外补充Array.prototype.slice的实现
 */
Array.prototype.ddSlice = function (start, end) {
  var arr = this
  start = start || 0
  end = end || arr.length
  var newArr = []
  for (var i = start; i < end; i++) {
    newArr.push(arr[i])
  }
  return newArr
}

